Grundkurs SQL

5.3  Unterabfragen – mit Ergebnistabellen

Abfragen, die eine Tabelle als Ergebnis liefern können mit ANY oder ALL als Unterabfrage eingesetzt werden.

Das ANY Schlüsselwort, welches mit einem Vergleichsoperator verbunden sein muss, liefert ein TRUE (richtig), wenn für mindestens einen Datensatz der Unterabfrage der Vergleich zutrifft.

Wir suchen alle Mitarbeiter die schon länger in der Firma arbeiten, als irgendein Mitarbeiter der aus Radeberg (PLZ = 01796) kommt.

[9]SELECT name AS Nachname, einstelldatum
FROM   tbl_mitarbeiter
WHERE  einstelldatum < ANY
       (SELECT einstelldatum
        FROM   tbl_mitarbeiter
        WHERE plz = "01796")

Das Ergebnis der Unterabfrage liefert uns die beiden Daten: 1986-08-05 und 1990-01-28. Diese beiden Informationen werden nun benutzt um zu überprüfen, ob die Vergleichsbedingung erfüllt ist oder nicht. Wir haben hier ANY in der Abfrage eingesetzt, also muss der Vergleich nur für eines der Ergebnisse der Unterabfrage übereinstimmen.

Bei der Verwendung von ALL muss der gemachte Vergleich für alle Datensätze der Unterabfrage zutreffen. Hier geben wir alle Namen der Mitarbeiter aus, die schon länger in der Firma sind, als alle Mitarbeiter aus Radeberg (PLZ = 01796).

[7]SELECT name AS Nachname, einstelldatum
FROM   tbl_mitarbeiter
WHERE  einstelldatum < ALL
       (SELECT einstelldatum
        FROM   tbl_mitarbeiter
        WHERE plz = "01796")

(Zum Herausfiltern der 0000-00-00 Daten, könnte man in der WHERE Zeile noch eine weitere Bedingung einfügen.)